//主页权限拦截验证

import router from "@/router"; //导入路由模块
import nProgress from "nprogress"; //导入进度条模块
import "nprogress/nprogress.css"; //引用nprogress的样式文件
import store from "@/store"; //导入vuex

let whiteList = ["/login", "/404"]; //声明白名单数组
//前置守卫
router.beforeEach(async (to, from, next) => {
  nProgress.start(); //开始进度条

  //判断是否有token，并执行不同的逻辑
  //有token的情况下：
  if (store.getters.token) {
    //判断是否要访问login
    if (to.path === "/login") {
      //直接跳转到主页
      next("/");
      //因为next()里有路由地址，不会执行后置守卫 ，因此需要手动关闭进度条
      nProgress.done();
    } else {
      //获取登录用户资料
      if (!store.getters.userId) {
        //如果vuex中没有userId，则调用vuex中的user模块中的Action[getUserinfo]去获取用户资料
        await store.dispatch("user/getUserInfo");
      }
      //如果不是访问login，则直接放行
      next();
    }
  } else {
    //没有token的情况下，判断要访问的路由是否在白名单之中
    if (whiteList.includes(to.path)) {
      //如果要访问的路由在白名单内，则直接施行
      next();
    } else {
      //中转到登录页
      next("/login");
      //手动关闭进度条
      nProgress.done();
    }
  }
});

//后置守卫
router.afterEach(() => {
  nProgress.done(); //关闭进度条
});
